Apache Ant একটি বহুল ব্যবহৃত বিল্ড টুল, যা সফটওয়্যার ডেভেলপমেন্ট প্রক্রিয়াকে স্বয়ংক্রিয় করার জন্য ব্যবহৃত হয়। এর মধ্যে কিছু Advanced Built-in Tasks রয়েছে যা অ্যান্ট স্ক্রিপ্টে আরও উন্নত কার্যাবলী সম্পাদন করতে সহায়তা করে। এই টাস্কগুলি ফাইল সিস্টেমের কাজ থেকে শুরু করে, ডাটাবেস পরিচালনা, প্যাকেজিং, ক্লাউড ডিপ্লয়মেন্ট, এবং আরও অনেক বিষয় নিয়ে কাজ করে।
এই নিবন্ধে আমরা Advanced Built-in Tasks সম্পর্কে বিস্তারিত আলোচনা করবো, যা অ্যান্ট স্ক্রিপ্টে ব্যবহৃত হয়ে সফটওয়্যার বিল্ড প্রক্রিয়া আরও উন্নত করতে সাহায্য করে।
antcall
টাস্কটি একটি টার্গেটকে অন্য টার্গেট থেকে কল করতে ব্যবহৃত হয়। এটি যখন একটি বিল্ড স্ক্রিপ্টে একাধিক টার্গেট বা কাজ একসাথে সম্পাদন করতে হয়, তখন খুব কার্যকরী।
<antcall target="compile"/>
<target name="compile">
<echo message="Compiling the source code..."/>
</target>
এটি compile
টার্গেটটি কল করবে এবং তার কার্যাবলী এক্সিকিউট করবে, যেমন "Compiling the source code..." বার্তা প্রিন্ট করা।
target
: যে টার্গেটটি কল করা হবে।fail
টাস্কটি বিল্ড প্রক্রিয়া থামাতে ব্যবহৃত হয়, বিশেষত যখন কোনও ত্রুটি ঘটলে বিল্ড সফল হয়নি বলে নিশ্চিত করতে হয়। এটি বিল্ডের চলার সময় একটি ত্রুটি বার্তা প্রদর্শন করে।
<fail message="The build failed due to missing dependencies."/>
এটি বিল্ড থামিয়ে দিবে এবং কনসোলে "The build failed due to missing dependencies." বার্তা প্রিন্ট করবে।
message
: ত্রুটির বার্তা যা কনসোলে বা লগে প্রিন্ট হবে।parallel
টাস্কটি একাধিক টাস্ক বা টার্গেটকে একসাথে চালাতে ব্যবহৃত হয়। এটি বিশেষভাবে কার্যকর যখন আপনি একাধিক নির্দিষ্ট কাজের জন্য সমান্তরাল প্রক্রিয়া চান, যা বিল্ডের গতি দ্রুত করতে সহায়তা করে।
<parallel>
<target name="task1">
<echo message="Task 1 running..."/>
</target>
<target name="task2">
<echo message="Task 2 running..."/>
</target>
</parallel>
এটি task1
এবং task2
একযোগে এক্সিকিউট করবে এবং তাদের বার্তা কনসোলে প্রিন্ট করবে।
parallel
: একাধিক টাস্ক বা টার্গেট একযোগে চালাবে।sequential
টাস্কটি একাধিক টাস্ককে একের পর এক (সিকোয়েন্সে) এক্সিকিউট করতে ব্যবহৃত হয়। এটি বিভিন্ন ধাপে কাজ সম্পাদন করার জন্য ব্যবহৃত হয়।
<target name="process">
<sequential>
<echo message="Step 1: Initializing..."/>
<echo message="Step 2: Compiling..."/>
<echo message="Step 3: Packaging..."/>
</sequential>
</target>
এটি তিনটি স্টেপ একে একে এক্সিকিউট করবে এবং কনসোলে তিনটি বার্তা প্রিন্ট করবে।
sequential
: একাধিক টাস্ক একে একে চালানো হবে।mkdir
টাস্কটি নতুন ডিরেক্টরি তৈরি করতে ব্যবহৃত হয়। এটি সাধারণত ফাইল সিস্টেমে ডিরেক্টরি তৈরি করার জন্য ব্যবহৃত হয়, যেমন বিল্ড আউটপুট ডিরেক্টরি বা আর্কাইভ ফোল্ডার তৈরি।
<mkdir dir="build/classes"/>
এটি build/classes
ডিরেক্টরি তৈরি করবে।
dir
: যে ডিরেক্টরি তৈরি করতে হবে তার পাথ।zip
টাস্কটি একাধিক ফাইল বা ডিরেক্টরি একটি ZIP আর্কাইভে সঙ্কুচিত (compress) করতে ব্যবহৃত হয়। এটি ব্যবহৃত হয় প্যাকেজিং কাজের জন্য।
<zip destfile="dist/project.zip" basedir="build/classes"/>
এটি build/classes
ডিরেক্টরি থেকে সমস্ত ফাইল নিয়ে একটি project.zip
ফাইল তৈরি করবে।
destfile
: ZIP আর্কাইভের গন্তব্য ফাইল।basedir
: ZIP করার জন্য ডিরেক্টরি বা ফাইলের উৎস।unzip
টাস্কটি একটি ZIP আর্কাইভ এক্সট্র্যাক্ট (extract) করতে ব্যবহৃত হয়। এটি ব্যবহৃত হয় কোনো ZIP ফাইল থেকে ফাইল বা ডিরেক্টরি বের করার জন্য।
<unzip src="dist/project.zip" dest="build/resources"/>
এটি dist/project.zip
ফাইলটিকে build/resources
ডিরেক্টরিতে এক্সট্র্যাক্ট করবে।
src
: এক্সট্র্যাক্ট করার জন্য ZIP ফাইলের পাথ।dest
: এক্সট্র্যাক্ট করা ফাইল যেখানে রাখা হবে।jar
টাস্কটি JAR (Java Archive) ফাইল তৈরি করতে ব্যবহৃত হয়। এটি সাধারণত Java ক্লাস ফাইল এবং অন্যান্য রিসোর্স ফাইলগুলো একত্রিত করে একটি JAR ফাইলে প্যাকেজ করার জন্য ব্যবহৃত হয়।
<jar destfile="dist/myapp.jar" basedir="build/classes">
<manifest>
<attribute name="Main-Class" value="com.example.Main"/>
</manifest>
</jar>
এটি build/classes
ডিরেক্টরি থেকে সমস্ত ক্লাস ফাইল নিয়ে একটি myapp.jar
ফাইল তৈরি করবে এবং এতে Main-Class
অ্যাট্রিবিউট থাকবে।
destfile
: JAR ফাইলের গন্তব্য পাথ।basedir
: JAR ফাইলে অন্তর্ভুক্ত করতে যে ফাইলগুলি আছে।manifest
: JAR ফাইলে ম্যানিফেস্ট তথ্য যোগ করতে ব্যবহৃত হয়।copydir
টাস্কটি একটি ডিরেক্টরি এবং তার সমস্ত কনটেন্ট অন্য ডিরেক্টরিতে কপি করতে ব্যবহৃত হয়।
<copydir todir="build/resources">
<fileset dir="src/resources"/>
</copydir>
এটি src/resources
ডিরেক্টরির সমস্ত কনটেন্ট build/resources
ডিরেক্টরিতে কপি করবে।
todir
: গন্তব্য ডিরেক্টরি যেখানে কপি হবে।fileset
টাস্কটি একটি ফাইল প্যাটার্ন ব্যবহার করে একাধিক ফাইল নির্বাচন করতে ব্যবহৃত হয়। এটি সাধারণত কপি, মুছে ফেলা বা অন্য কাজের জন্য ফাইল নির্বাচন করতে ব্যবহৃত হয়।
<fileset dir="src/resources">
<include name="*.xml"/>
</fileset>
এটি src/resources
ডিরেক্টরি থেকে সমস্ত .xml
ফাইল নির্বাচন করবে।
Apache Ant Advanced Built-in Tasks আপনাকে আরও জটিল বিল্ড প্রক্রিয়া পরিচালনা করতে সহায়তা করে, যেমন ফাইল সিস্টেম পরিচালনা, জাভা ক্লাস ফাইল প্যাকেজিং, ZIP আর্কাইভ তৈরি এবং এক্সট্র্যাক্ট করা, টাস্ক এক্সিকিউশন নিয়ন্ত্রণ, সমান্তরাল কার্যক্রম পরিচালনা, এবং আরও অনেক কিছু। antcall
, fail
, parallel
, sequential
, zip
, unzip
, এবং jar
টাস্কগুলি বিল্ড প্রক্রিয়াকে আরও শক্তিশালী এবং কার্যকরী করতে সহায়তা করে। এই টাস্কগুলি ব্যবহার করে আপনি বিল্ড প্রক্রিয়াকে আরও কাস্টমাইজড, দ্রুত এবং নির্ভরযোগ্য করতে পারেন।
Apache Ant-এ <replace>
টাস্কটি একটি ফাইলের মধ্যে নির্দিষ্ট টেক্সট বা স্ট্রিং পরিবর্তন করার জন্য ব্যবহৃত হয়। এটি সাধারণত text replacement (টেক্সট প্রতিস্থাপন) এর জন্য ব্যবহৃত হয়, যেমন কনফিগারেশন ফাইলের মধ্যে কিছু মান পরিবর্তন করা বা সোর্স কোডের মধ্যে নির্দিষ্ট স্ট্রিং পরিবর্তন করা।
<replace file="file_path" token="old_text" value="new_text"/>
এটি একটি সহজ উদাহরণ যেখানে একটি ফাইলে old_text কে new_text দিয়ে প্রতিস্থাপন করা হচ্ছে।
sample.txt
This is an old file.
We need to replace the old text with new text.
<project name="ReplaceTextExample" default="replaceText" basedir=".">
<target name="replaceText">
<!-- Replacing text in the file -->
<replace file="sample.txt" token="old" value="new"/>
</target>
</project>
এখানে:
sample.txt
ফাইলের মধ্যে old শব্দটি new দিয়ে প্রতিস্থাপন করবে।ফাইলের মধ্যে old শব্দটি new দিয়ে পরিবর্তিত হবে। নতুন sample.txt
ফাইলটি এমন দেখাবে:
This is an new file.
We need to replace the new text with new text.
একাধিক টোকেন বা স্ট্রিং একসাথে প্রতিস্থাপন করতে আপনি <replace>
টাস্কে একাধিক টোকেন নির্ধারণ করতে পারেন।
<project name="ReplaceMultipleTextExample" default="replaceMultipleText" basedir=".">
<target name="replaceMultipleText">
<!-- Replacing multiple tokens in the file -->
<replace file="sample.txt" token="old" value="new"/>
<replace file="sample.txt" token="file" value="document"/>
</target>
</project>
এখানে:
নতুন sample.txt
ফাইলটি এমন দেখাবে:
This is an new document.
We need to replace the new text with new text.
<replace>
টাস্কে আপনি regular expressions ব্যবহার করতে পারেন, যার মাধ্যমে আরও জটিল টেক্সট পরিবর্তন করা সম্ভব।
<project name="ReplaceRegexExample" default="replaceRegex" basedir=".">
<target name="replaceRegex">
<!-- Replacing text using regular expression -->
<replace file="sample.txt" token="old\sfile" value="new document" />
</target>
</project>
এখানে:
token="old\sfile"
: এখানে \s
ব্যবহার করা হয়েছে যা space (স্পেস) কে চিহ্নিত করে, এবং old file এর জায়গায় new document বসানো হবে।ফাইলের মধ্যে old file শব্দটি new document দিয়ে প্রতিস্থাপিত হবে।
This is an new document.
We need to replace the new text with new text.
আপনি যদি ফাইলটি পরিবর্তন করার আগে তার একটি ব্যাকআপ রাখতে চান, তবে <replace>
টাস্কে backup অ্যাট্রিবিউট ব্যবহার করতে পারেন।
<project name="ReplaceWithBackupExample" default="replaceWithBackup" basedir=".">
<target name="replaceWithBackup">
<!-- Replacing text with backup -->
<replace file="sample.txt" token="old" value="new" backup="true"/>
</target>
</project>
এখানে:
যখন আপনি replaceWithBackup টাস্কটি রান করবেন, sample.txt
ফাইলটির একটি ব্যাকআপ তৈরি হবে, যা sample.txt~
নামে সংরক্ষণ হবে।
আপনি fileset টাস্ক ব্যবহার করে একাধিক ফাইলে টেক্সট পরিবর্তন করতে পারেন।
<project name="ReplaceInMultipleFilesExample" default="replaceInMultipleFiles" basedir=".">
<target name="replaceInMultipleFiles">
<replace>
<fileset dir="src" includes="*.txt"/>
<token value="old"/>
<value value="new"/>
</replace>
</target>
</project>
এখানে:
যে সমস্ত .txt ফাইল src ডিরেক্টরিতে রয়েছে, সেগুলির মধ্যে old শব্দটি new দিয়ে প্রতিস্থাপন করা হবে।
<replace>
টাস্কে আপনি encoding অ্যাট্রিবিউট ব্যবহার করে ফাইলের ইনকোডিং নির্ধারণ করতে পারেন।
<project name="ReplaceWithEncodingExample" default="replaceWithEncoding" basedir=".">
<target name="replaceWithEncoding">
<!-- Replacing text with encoding -->
<replace file="sample.txt" token="old" value="new" encoding="UTF-8"/>
</target>
</project>
এখানে:
ফাইলটি UTF-8 এনকোডিংয়ে পরিবর্তিত হবে, এবং old শব্দটি new দিয়ে প্রতিস্থাপিত হবে।
<replace>
টাস্কটি Apache Ant-এ একটি অত্যন্ত উপকারী টাস্ক যা ফাইলের মধ্যে টেক্সট পরিবর্তন করার জন্য ব্যবহৃত হয়। এটি ব্যবহার করে আপনি:
এটি একটি খুবই উপকারী টাস্ক যখন আপনি কোড বা কনফিগারেশন ফাইলগুলিতে টেক্সট পরিবর্তন করার কাজ অটোমেট করতে চান।
Apache Ant একটি শক্তিশালী বিল্ড টুল যা Java প্রোজেক্টের বিল্ড প্রক্রিয়াকে অটোমেট করার জন্য ব্যবহৃত হয়। Checksum টাস্কটি ফাইলের checksum তৈরি করতে ব্যবহৃত হয়, যা ফাইলের অখণ্ডতা যাচাই করার জন্য কাজে আসে। Checksum হল একটি ছোট হ্যাশ ভ্যালু যা ফাইলের কনটেন্টের উপর ভিত্তি করে তৈরি করা হয় এবং এটি সাধারণত ফাইলের পরিবর্তন বা দুর্নীতির সনাক্তকরণের জন্য ব্যবহৃত হয়।
<checksum>
টাস্কটি ব্যবহার করে আপনি ফাইলের checksum তৈরি করতে পারেন এবং যাচাই করতে পারেন, যা একটি নির্দিষ্ট ফাইলের বা ডিরেক্টরির অখণ্ডতা নিশ্চিত করার জন্য উপকারী।
<checksum>
Task: Overview<checksum>
টাস্কটি একটি ফাইলের জন্য checksum তৈরি করতে ব্যবহার করা হয়। এটি মূলত দুইটি ফাংশনালিটি সরবরাহ করে:
ফাইলের checksum তৈরি করার জন্য সাধারণত MD5, SHA-1, বা SHA-256 হ্যাশ অ্যালগরিদম ব্যবহৃত হয়।
<checksum file="source_file" property="checksum_property" algorithm="MD5"/>
file
: এটি সেই ফাইলের পাথ যা থেকে checksum তৈরি করতে হবে।property
: checksum এর মান সংরক্ষণের জন্য প্রপার্টি নাম।algorithm
: এটি সেই অ্যালগরিদমের নাম যা ব্যবহার করে checksum তৈরি করা হবে (যেমন MD5, SHA-1, SHA-256)।এখানে একটি সাধারণ উদাহরণ দেয়া হলো যেখানে <checksum>
টাস্ক ব্যবহার করে একটি ফাইলের checksum তৈরি করা হচ্ছে।
<project name="ChecksumExample" default="generate-checksum">
<target name="generate-checksum">
<!-- Generate checksum for a file -->
<checksum file="example.txt" property="file.checksum" algorithm="MD5"/>
<echo message="Checksum: ${file.checksum}"/>
</target>
</project>
এখানে:
<checksum>
টাস্ক example.txt
ফাইলের জন্য MD5 অ্যালগরিদম ব্যবহার করে checksum তৈরি করছে।<echo>
টাস্কের মাধ্যমে সেই checksum কনসোলে আউটপুট হচ্ছে।আপনি <checksum>
টাস্ক ব্যবহার করে একটি ফাইলের checksum যাচাইও করতে পারেন। এটি সাধারণত ব্যবহৃত হয় যখন আপনি নিশ্চিত হতে চান যে একটি ফাইল সঠিক এবং তার মধ্যে কোনো পরিবর্তন হয়নি।
<project name="VerifyChecksumExample" default="verify-checksum">
<target name="verify-checksum">
<!-- Generate checksum for a file -->
<checksum file="example.txt" property="generated.checksum" algorithm="MD5"/>
<!-- Verify the checksum against an expected checksum -->
<condition property="checksum.match">
<equals arg1="${generated.checksum}" arg2="expected_checksum_value"/>
</condition>
<echo message="Checksum matches: ${checksum.match}"/>
</target>
</project>
এখানে:
<checksum>
টাস্কটি example.txt
ফাইলের checksum তৈরি করে এবং generated.checksum
প্রপার্টিতে সেট করে।<condition>
টাস্কের মাধ্যমে যাচাই করা হয় যে, generated.checksum
প্রপার্টির মান expected_checksum_value
এর সাথে মিলে কিনা। যদি মিলে, তাহলে checksum.match
প্রপার্টি true
হবে।<echo>
টাস্কের মাধ্যমে ফলাফল কনসোলে প্রিন্ট হবে।আপনি একটি ডিরেক্টরি থেকে সমস্ত ফাইলের checksum তৈরি করতে পারেন। এই ক্ষেত্রে, <checksum>
টাস্কটি সমস্ত ফাইলের checksum তৈরি করবে এবং একটি প্রপার্টি ফাইলে সেগুলো সেভ করবে।
<project name="DirectoryChecksumExample" default="generate-directory-checksum">
<target name="generate-directory-checksum">
<!-- Generate checksum for all files in a directory -->
<checksum file="files/example.txt" property="checksum" algorithm="SHA-1"/>
<checksum file="files/sample.txt" property="checksum2" algorithm="SHA-1"/>
<echo message="Checksum for example.txt: ${checksum}"/>
<echo message="Checksum for sample.txt: ${checksum2}"/>
</target>
</project>
এখানে:
<checksum>
টাস্ক দুটি আলাদা ফাইলের checksum তৈরি করছে, একটি example.txt
এবং অন্যটি sample.txt
। উভয়ের জন্য SHA-1 অ্যালগরিদম ব্যবহার করা হয়েছে।<echo>
টাস্কের মাধ্যমে আউটপুট প্রিন্ট করা হয়েছে।Handle Errors Gracefully:
<fail>
টাস্ক ব্যবহার করুন।<fail message="Checksum mismatch detected!"/>
<checksum>
টাস্কটি অ্যাপাচি অ্যান্টের একটি গুরুত্বপূর্ণ টাস্ক, যা ফাইলের checksum তৈরি এবং যাচাই করার জন্য ব্যবহৃত হয়। এটি ফাইলের অখণ্ডতা নিশ্চিত করার জন্য কাজে আসে এবং MD5, SHA-1, বা SHA-256 মতো হ্যাশ অ্যালগরিদম ব্যবহার করে। Checksum তৈরি এবং যাচাইয়ের মাধ্যমে আপনি ফাইলের অখণ্ডতা নিশ্চিত করতে পারেন, যা বিশেষত সফটওয়্যার ডেভেলপমেন্ট এবং ডিপ্লয়মেন্ট প্রক্রিয়ায় সহায়ক।
Apache Ant একটি ওপেন সোর্স বিল্ড টুল যা প্রধানত Java প্রজেক্টের বিল্ড, টেস্টিং এবং ডিপ্লয়মেন্টের জন্য ব্যবহৃত হয়। এর মধ্যে একটি শক্তিশালী টাস্ক হল <exec>
টাস্ক, যা আপনাকে external programs বা কমান্ড লাইনের প্রোগ্রাম চালাতে সহায়তা করে। এটি আপনার বিল্ড প্রক্রিয়ার মধ্যে বাহ্যিক কমান্ড বা স্ক্রিপ্ট (যেমন ব্যাচ স্ক্রিপ্ট, শেল স্ক্রিপ্ট, বা অন্য যেকোনো এক্সটার্নাল প্রোগ্রাম) চালানোর সুযোগ দেয়।
এই টাস্কটি বিভিন্ন পরিস্থিতিতে ব্যবহার করা যেতে পারে, যেমন ডিপ্লয়মেন্ট প্রক্রিয়া, টেস্টিং, অথবা অন্য কোনো বহিরাগত প্রোগ্রাম বা স্ক্রিপ্ট চালানোর জন্য। আপনি যেমন JAR ফাইল রান করা, নেটওয়ার্ক অ্যাপ্লিকেশন চালানো বা বাহ্যিক স্ক্রিপ্ট চালানোর জন্য ব্যবহার করতে পারেন।
<exec>
টাস্কটি বাহ্যিক প্রোগ্রাম চালানোর জন্য ব্যবহৃত হয়। এটি বাহ্যিক কমান্ড বা স্ক্রিপ্ট সিস্টেমের টার্মিনাল/কমান্ড লাইনে রান করে এবং তার আউটপুট বিল্ড স্ক্রিপ্টে আনা যায়। <exec>
টাস্কটি অ্যাপাচি অ্যান্টের মধ্যে একটি খুবই কার্যকরী টাস্ক, যখন আপনাকে বিল্ড প্রক্রিয়ায় বাহ্যিক অ্যাপ্লিকেশন বা কমান্ডের ইনটিগ্রেশন করতে হয়।
true
হয়, তবে বাহ্যিক প্রোগ্রাম যদি ব্যর্থ হয়, তাহলে পুরো বিল্ড প্রক্রিয়া থেমে যাবে।true
হয়, এটি বাহ্যিক প্রোগ্রামকে নতুন থ্রেডে রান করতে দেবে, মূল প্রক্রিয়াকে ব্লক না করে।<project name="ExecTaskExample" default="run-command">
<target name="run-command">
<!-- Running an external command (example: echo) -->
<exec executable="echo">
<arg value="Hello from the exec task!"/>
</exec>
</target>
</project>
<exec>
টাস্কটি echo
কমান্ড চালাচ্ছে এবং <arg>
টাস্কের মাধ্যমে "Hello from the exec task!" আর্গুমেন্টটি প্রোগ্রামটি পাঠাচ্ছে।"Hello from the exec task!"
মেসেজটি প্রদর্শিত হবে।<project name="RunScriptExample" default="run-script">
<target name="run-script">
<!-- Running an external shell script -->
<exec executable="sh">
<arg value="scripts/myscript.sh"/>
</exec>
</target>
</project>
<exec>
টাস্কটি sh
কমান্ডের মাধ্যমে myscript.sh
স্ক্রিপ্ট চালাবে, যা scripts/
ডিরেক্টরিতে অবস্থান করছে।<project name="FailOnErrorExample" default="run-command">
<target name="run-command">
<!-- Running a command with failonerror -->
<exec executable="nonexistent-command" failonerror="true"/>
</target>
</project>
<exec>
টাস্কটি nonexistent-command
চালানোর চেষ্টা করছে, যা এক্সিস্ট করে না।failonerror="true"
ব্যবহারের ফলে, বাহ্যিক কমান্ডের ত্রুটির কারণে পুরো বিল্ড প্রক্রিয়া ব্যর্থ হবে এবং এটির জন্য একটি ত্রুটি বার্তা কনসোলে প্রদর্শিত হবে।<project name="ExecWithArgsAndDir" default="run-command">
<target name="run-command">
<!-- Running a command with arguments and directory -->
<exec executable="java" dir="build/classes">
<arg value="-classpath"/>
<arg value="."/>
<arg value="com.example.Main"/>
</exec>
</target>
</project>
<exec>
টাস্কটি java
কমান্ড চালাচ্ছে এবং com.example.Main
ক্লাসটি চালাতে -classpath
আর্গুমেন্ট ব্যবহার করছে।dir="build/classes"
দ্বারা এটি java
কমান্ডটি build/classes
ডিরেক্টরিতে চালাবে।আপনি যদি চান যে বাহ্যিক প্রোগ্রামটি আপনার প্রক্রিয়াকে ব্লক না করে চলতে থাকুক, তাহলে spawn="true"
অ্যাট্রিবিউট ব্যবহার করতে পারেন।
<project name="ExecWithSpawn" default="run-command">
<target name="run-command">
<!-- Running a command with spawn -->
<exec executable="long-running-command" spawn="true"/>
<echo message="Command is running in the background"/>
</target>
</project>
spawn="true"
ব্যবহৃত হয়েছে, যার মাধ্যমে long-running-command
কমান্ডটি একটি নতুন থ্রেডে চালানো হবে এবং মূল প্রক্রিয়া ব্লক না হয়ে echo
টাস্কটি চলবে এবং "Command is running in the background" মেসেজ কনসোলে প্রদর্শিত হবে।<exec>
Taskfailonerror
অ্যাট্রিবিউট ব্যবহার করে বাহ্যিক প্রোগ্রামের ত্রুটি ধরতে পারবেন এবং বিল্ড থামিয়ে দিতে পারবেন।<exec>
টাস্কটি অ্যাপাচি অ্যান্টে একটি অত্যন্ত শক্তিশালী টাস্ক, যা বাহ্যিক প্রোগ্রাম বা স্ক্রিপ্ট চালাতে ব্যবহৃত হয়। এটি আপনাকে বিভিন্ন কমান্ড বা স্ক্রিপ্ট (যেমন Java, Shell, Batch) চালানোর সুযোগ দেয় এবং এর আউটপুটকে বিল্ড প্রক্রিয়ার অংশ হিসেবে অন্তর্ভুক্ত করতে সহায়তা করে। spawn
, failonerror
, এবং verbose
সহ বিভিন্ন অ্যাট্রিবিউট ব্যবহার করে <exec>
টাস্ককে আরও কাস্টমাইজ করা যায়, যা আপনাকে বাহ্যিক প্রোগ্রাম বা স্ক্রিপ্টের কার্যক্রমে আরও নিয়ন্ত্রণ প্রদান করে।
অ্যাপাচি অ্যান্ট (Apache Ant) একটি ওপেন সোর্স বিল্ড টুল যা সফটওয়্যার ডেভেলপমেন্ট এবং বিল্ড প্রক্রিয়া অটোমেট করার জন্য ব্যবহৃত হয়। SSH Task অ্যাপাচি অ্যান্টে একটি বিশেষ টাস্ক যা SSH (Secure Shell) প্রোটোকল ব্যবহার করে রিমোট সার্ভারে কমান্ড চালাতে সক্ষম। এই টাস্কটি রিমোট সার্ভারের সাথে নিরাপদ সংযোগ স্থাপন করে এবং সেখানে কমান্ড এক্সিকিউট করার জন্য ব্যবহৃত হয়।
SSH Task টাস্কটি ব্যবহারকারীদের রিমোট সার্ভারে কমান্ড এক্সিকিউট করতে সহায়তা করে। এটি সাধারণত তখন ব্যবহৃত হয় যখন আপনি একাধিক সার্ভারে বিল্ড বা ডিপ্লয়মেন্ট টাস্ক পরিচালনা করতে চান, বিশেষ করে যখন ওই সার্ভারগুলোতে সরাসরি প্রবেশ করা সম্ভব না হয় (যেমন সার্ভার রিমোট অবস্থানে থাকে)। এই টাস্কটি SSH প্রোটোকল ব্যবহার করে নিরাপদ সংযোগ স্থাপন করে এবং রিমোট সার্ভারে নির্দিষ্ট কমান্ড রান করে।
টাস্কটি অ্যাপাচি অ্যান্টের একটি শক্তিশালী টাস্ক, যা রিমোট সার্ভারে SSH এর মাধ্যমে কমান্ড চালাতে ব্যবহৃত হয়। এটি host
, username
, password
বা privatekey
এর মাধ্যমে রিমোট সার্ভারে লগইন করতে পারে এবং সেখানে কোনো নির্দিষ্ট কমান্ড এক্সিকিউট করতে পারে।
<ssh host="remote.server.com" username="user" password="password">
<exec command="ls -l /home/user"/>
</ssh>
এটি remote.server.com
এ SSH ব্যবহার করে লগইন করবে এবং সেখানে ls -l /home/user
কমান্ড চালাবে।
host অ্যাট্রিবিউটটি রিমোট সার্ভারের হোস্টনেম বা আইপি অ্যাড্রেস নির্ধারণ করে যেখানে কমান্ড এক্সিকিউট করা হবে।
উদাহরণ:
<ssh host="remote.server.com" username="user" password="password">
<exec command="uptime"/>
</ssh>
এটি remote.server.com
সার্ভারে uptime
কমান্ড চালাবে।
username অ্যাট্রিবিউটটি রিমোট সার্ভারে লগইন করার জন্য ব্যবহারকারীর নাম নির্ধারণ করে।
উদাহরণ:
<ssh host="remote.server.com" username="admin" password="password">
<exec command="df -h"/>
</ssh>
এটি remote.server.com
সার্ভারে admin
ব্যবহারকারীর মাধ্যমে লগইন করে df -h
কমান্ড চালাবে।
password অ্যাট্রিবিউটটি ব্যবহারকারীর পাসওয়ার্ড নির্ধারণ করে, এবং privatekey অ্যাট্রিবিউটটি SSH প্রাইভেট কী ব্যবহার করে নিরাপদ লগইন করতে সহায়তা করে। আপনি পাসওয়ার্ড অথবা প্রাইভেট কী যে কোনো একটি ব্যবহার করতে পারেন।
উদাহরণ (Password):
<ssh host="remote.server.com" username="user" password="password">
<exec command="uptime"/>
</ssh>
উদাহরণ (Private Key):
<ssh host="remote.server.com" username="user" privatekey="/path/to/private.key">
<exec command="uptime"/>
</ssh>
exec টাস্কটি SSH এর মাধ্যমে নির্দিষ্ট কমান্ড এক্সিকিউট করার জন্য ব্যবহৃত হয়। এটি নির্দিষ্ট কমান্ড রিমোট সার্ভারে রান করবে।
উদাহরণ:
<ssh host="remote.server.com" username="user" password="password">
<exec command="ls -l /home/user"/>
</ssh>
এটি রিমোট সার্ভারে /home/user
ডিরেক্টরির কন্টেন্ট তালিকা দেখাবে।
output অ্যাট্রিবিউটটি কমান্ডের আউটপুট রিট্রিভ করে এবং সেটা কনসোলে বা একটি ফাইলে প্রিন্ট করতে ব্যবহৃত হয়।
উদাহরণ:
<ssh host="remote.server.com" username="user" password="password">
<exec command="uptime" output="uptime.txt"/>
</ssh>
এটি uptime
কমান্ডের আউটপুট uptime.txt
ফাইলে সংরক্ষণ করবে।
<project name="RemoteCommandExample" default="runCommand">
<target name="runCommand">
<ssh host="remote.server.com" username="user" password="password">
<exec command="uptime"/>
</ssh>
</target>
</project>
এটি remote.server.com
সার্ভারে লগইন করবে এবং uptime
কমান্ড চালাবে।
<project name="RemoteCommandWithPrivateKey" default="runCommand">
<target name="runCommand">
<ssh host="remote.server.com" username="user" privatekey="/path/to/private.key">
<exec command="df -h"/>
</ssh>
</target>
</project>
এটি প্রাইভেট কী দিয়ে লগইন করে df -h
কমান্ড রিমোট সার্ভারে এক্সিকিউট করবে।
<project name="RemoteCommandWithOutput" default="runCommand">
<target name="runCommand">
<ssh host="remote.server.com" username="user" password="password">
<exec command="uptime" output="uptime.txt"/>
</ssh>
</target>
</project>
এটি uptime
কমান্ডের আউটপুট uptime.txt
ফাইলে সংরক্ষণ করবে।
<project name="VerboseSSHExample" default="runCommand">
<target name="runCommand">
<ssh host="remote.server.com" username="user" password="password">
<exec command="ls -l /home/user" verbose="true"/>
</ssh>
</target>
</project>
এটি ls -l /home/user
কমান্ড চালাবে এবং কমান্ডের বিস্তারিত আউটপুট কনসোলে প্রদর্শন করবে।
SSH Task অ্যাপাচি অ্যান্টের একটি শক্তিশালী টাস্ক যা SSH প্রোটোকল ব্যবহার করে রিমোট সার্ভারে কমান্ড এক্সিকিউট করার জন্য ব্যবহৃত হয়। এটি নিরাপদভাবে রিমোট সার্ভারে সংযোগ স্থাপন করে এবং সেখানে নির্দিষ্ট কাজ চালায়। আপনি host
, username
, password
বা privatekey
, exec
, এবং output
অ্যাট্রিবিউট ব্যবহার করে রিমোট সার্ভারে কাজ করতে পারেন। এটি সাধারণত ডিপ্লয়মেন্ট, টেস্টিং, সিস্টেম ম্যানেজমেন্ট এবং ডিবাগিং এর জন্য ব্যবহৃত হয়।
common.read_more